//线程中的方法
//线程中的方法
//线程中的方法
//测试系统自带的标志位

//1.0
//使用Thread.currentThread().isInterrupted() - 直接退出
//public class demo2 {
//    public static void main(String[] args) throws InterruptedException {
//        Thread thread=new Thread(()->{
//            while(!Thread.currentThread().isInterrupted()){
//                System.out.println("新线程运行中...");
//                for(int i=0;i<20;i++){
//                    System.out.println("新线程"+i);
//                    try {
//                        Thread.sleep(1000);
//                    } catch (InterruptedException e) {
//                        e.printStackTrace();
//                    }
//                }
//            }
//        });
//        thread.start();
//        thread.interrupt();
//    }
//}
//调用thread.interrupt()后直接退出




//使用Thread.currentThread().isInterrupted() - 阻塞一段时间退出
//public class demo2 {
//    public static void main(String[] args) throws InterruptedException {
//        Thread thread=new Thread(()->{
//            while(!Thread.currentThread().isInterrupted()){
//                System.out.println("新线程运行中...");
//                for(int i=0;i<20;i++){
//                    System.out.println("新线程"+i);
////                    try {
////                        Thread.sleep(1000);
////                    } catch (InterruptedException e) {
////                        e.printStackTrace();
////                    }
//                }
//            }
//        });
//        thread.start();
//        //Thread.sleep(5000);
//        // 观察发现,如果不使用Thread.sleep(5000),新线程会立即退出
//        //     此时主线程新线程速度相当,都会被随机调度.并发执行的时候,主线程往下走到interrupted新线程可能还没进入while循环直接退出
//        // 如果使用Thread.sleep(5000),会使主线程进入休眠状态
//        //     此时主线程被阻塞,新线程照常运行.当主线程解除阻塞,新线程可能处于while循环之中,也可能处于while中的sleep阻塞状态
//        thread.interrupt();
//        System.out.println("控制新线程退出");
//    }
//}
//???为什么报错
//???为什么报错之后还在运行,不是应该理解停止吗
//???什么时候时阻塞状态/不阻塞状态
//???阻塞/不阻塞状态表现出什么样子





//使用Thread.interrupted()
//public class demo2 {
//    public static void main(String[] args) throws InterruptedException {
//        Thread thread=new Thread(()->{
//            while(!Thread.interrupted()){
//                System.out.println("新线程运行中...");
//                for(int i=0;i<20;i++){
//                    System.out.println("新线程"+i);
//                    try {
//                        Thread.sleep(1000);
//                    } catch (InterruptedException e) {
//                        e.printStackTrace();
//                    }
//                }
//            }
//        });
//        thread.start();
//        Thread.sleep(5000);
//        System.out.println("控制新线程退出");
//        thread.interrupt();
//    }
//}




//回顾-使用系统自带的标志位
public class demo2 {
    public static void main(String[] args) throws InterruptedException {
        Thread thread=new Thread(()->{
            while(!Thread.currentThread().isInterrupted()){
                System.out.println("新线程运行中...");
               try {
                   Thread.sleep(1000);
               } catch (InterruptedException e) {
                   //===== 默认异常处理 ======
                   //打印异常
                   e.printStackTrace();

                   //===== 自己写异常处理 ======
                   //[1] 直接退出
//                   break;

                   //[2] 稍后退出, 此处的 sleep 可以换成任意的用来收尾工作的代码
//                    try {
//                        Thread.sleep(3000);
//                    } catch (InterruptedException ex) {
//                        ex.printStackTrace();
//                    }
//                    break;

                   //[3] 不退出,什么都不干就行

               }
            }
            System.out.println("新线程结束");
        });
        thread.start();
        Thread.sleep(1000);
        System.out.println("控制新线程结束");
        thread.interrupt();
    }
}